package com.hxkj.service;


import com.github.pagehelper.PageInfo;
import com.hxkj.domain.po.AuthFunction;
import com.hxkj.domain.po.FunctionMenu;
import com.hxkj.domain.po.FunctionTree;
import com.hxkj.entity.po.Function;
import com.platform.common.domain.to.PageTo;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Created by admin on 2017/8/21.
 */
public interface FunctionService {
    /**
     *
     * 根据主键查询Function对象
     *
     * @param functionId
     * @return Function对象
     */
    Function get(Long functionId);

    /**
     *
     * 根据查询条件查询符合条件的Function对象
     *
     * @param function
     * @return 符合条件的Function对象List
     */
    PageInfo<Function> get(PageTo pageTo, Function function);

    /**
     *
     * 根据查询条件查询符合条件的Function对象
     *
     * @param function
     * @return 符合条件的Function对象List
     */
    List<Function> get(Function function);

    /**
     *
     * 根据主键删除Function对象
     *
     * @param functionId
     * @return 影响条件数
     */
    int delete(Long functionId);

    /**
     *
     * 根据主键删除Function对象
     *
     * @param functionIdStr
     * @return 影响条件数
     */
    int delete(String functionIdStr);

    /**
     * 逻辑删除
     * @param functionId
     * @return
     */
    int deleteById(Long functionId);

    /**
     *
     * 根据条件删除符合条件的Function对象
     *
     * @param function
     * @return 影响条件数
     */
    int delete(Function function);

    /**
     *
     * 插入Function对象
     *
     * @param function
     * @return 影响条件数
     */
    int save(Function function);

    /**
     *
     * 更新Function对象
     *
     * @param function
     * @return 影响条件数
     */
    int update(Function function);

    /**
     * 根据账号查询permission集合
     * @param account
     * @return
     */
    Set<String> findPermissionsByAccount(String account) throws Exception;

    /**
     * 根据账号和appKey查找菜单集合
     * @param account
     * @param appKey
     * @return
     */
    List<FunctionMenu> findFunctionMenuByAccount(String account, String appKey);

    /**
     * 根据账号和appKey查找菜单集合
     * @param roleId
     * @param appKey
     * @return
     */
    List<FunctionMenu> findFunctionMenuByRoleId(Long roleId, String appKey);

    /**
     * 根据appkey查找所有funciton
     *
     * @param appKey
     * @return
     */
    List<Function> getFunctionsByAppKey(String appKey);

    /**
     * 根据account查找所有funciton
     *
     * @param appCode
     * @param account
     * @return
     */
    List<Function> getFunctionsByAccount(String appCode, String account);

    /**
     * 根据role查找所有funciton
     *
     * @param appCode
     * @param roleId
     * @return
     */
    List<Function> getFunctionsByRole(String appCode, Long roleId);

    /**
     * 根据appCode functionId
     * @param appCode
     * @param functionId
     * @return
     */
    Function getOneFunction(String appCode, Long functionId);


    Map<String,Object> getRoleFunction(Long roleId);


    /**
     * 获取功能列表
     * @return
     */
    List<FunctionTree>getFunctions(AuthFunction authFunction) throws Exception;

    /**
     * 增加功能
     * @param authFunction
     * @throws Exception
     */
    void saveFunction(AuthFunction authFunction) throws Exception;

    /**
     * 更新功能列表
     * @param authFunction
     */
    void updateFunction(AuthFunction authFunction) throws Exception;

    /**
     * 查询单个功能列表
     * @param authFunction
     * @return
     * @throws Exception
     */
    Object queryAuthFunction(AuthFunction authFunction)throws Exception;

    /**
     * 删除对应的节点
     * @param authFunction
     */
    void deleteFunction(AuthFunction authFunction)throws Exception;


    /**
     * 更新排序id
     * @param map
     * @throws Exception
     */
    void modifyOrderIds(Map<String, Object> map)throws Exception;
}
